基本變數設置
class="grocery-form"
抓取整個Formconst form = document.querySelector(".grocery-form");
class="alert"
抓取警告訊息<p>元素const alert = document.querySelector(".alert");
id="grocery"
抓取輸入方格const grocery = document.getElementById("grocery");
class="submit-btn"
抓取提交按鈕const submitBtn = document.querySelector(".submit-btn");
class="grocery-container"
抓取list區域const container = document.querySelector(".grocery-container");
class="grocery-list"
抓取包含所有項目的<div>元素const list = document.querySelector(".grocery-list");
class="clear-btn"
抓取清空list按鈕const clearBtn = document.querySelector(".clear-btn");
LocalStorage方法建立 :
我們在LocalStorage中,有個名為"list"的JSON物件,其中用
{"id" : "xxxxxx", "value" : "xxxx"}
的方式來儲存資料
function getLocalStorage() {
//將list的內容提取出來(temp的型態為String)
let temp = localStorage.getItem("list");
//如果list物件中有東西
if(temp){
//則回傳傳換為物件型態的temp,並蒐集所有物件進一個陣列
return JSON.parse(temp);
}else{
return [];
};
};
localStorage.getItem
: 可以取得LocalStorage中的內容JSON.parse(JSON字串)
: 可以將JSON字串
轉化為JavaScript的物件,並將所有物件皆放入一個陣列中
function addToLocalStorage(id, value) {
//新增一筆JS物件
const grocery = { id, value };
//取得目前LocalStorage的所有物件,並存入陣列item中
let items = getLocalStorage();
//將物件塞入陣列
items.push(grocery);
//將items轉回字串型態,並塞回list中
localStorage.setItem("list", JSON.stringify(items));
};
items.push()
: 可以添加一或多個元素至陣列的末端localStorage.setItem()
: 將資料暫存的內容重新刷新一次
//輸入欲刪除物品的id
function removeFromLocalStorage(id) {
//取得目前LocalStorage的所有物件,並存入陣列item
let items = getLocalStorage();
//利用Array.filter去篩選該物件以外的其他物件
items = items.filter(function (item) {
if (item.id !== id) {
return item;
};
});
//將items轉回字串型態,並塞回list中
localStorage.setItem("list", JSON.stringify(items));
};
Array.filter()
: 會回傳一個篩選過後的陣列,很適合用在搜尋符合條件的資料
//根據id和value去搜尋想要的物品
function editLocalStorage(id, value) {
//取得目前LocalStorage的所有物件,並存入陣列item
let items = getLocalStorage();
//利用Array.map()找出想要的物品,並更改其value
items = items.map(function (item) {
if (item.id === id) {
item.value = value;
};
return item;
});
//最後把items轉回字串型態,並塞回list中
localStorage.setItem("list", JSON.stringify(items));
};
Array.map()
: 需要回傳一個值,他會透過函式內所回傳的值組合成一個陣列。
- 如果不回傳則是
undefined
- 回傳數量等於原始陣列的長度